perm filename SLRSCL.F4[NEW,LCS]17 blob
sn#517371 filedate 1980-06-21 generic text, type T, neo UTF8
00100 C**SUBRS. SLUR, (JUGGLE), (LOOP), (PLTSRT), (LINES), (HOMER),
00200 C SCL,(FORMAT), IBLANK, BMX, ACSHFT, SETUP, TYPE, SETLET, BEAMX
00300
00400 SUBROUTINE SLUR
00500 IMPLICIT INTEGER(A-Q,T-Z)
00600 COMMON/SLR/ SLURX(32)
00700 REAL CENTR
00800 COMMON /XRN/RN(1) /PLTR/PLT,RHT,RDIS
00900 COMMON R2,JA,CENTR,J2,R3,R4,R5,R6,R7,R8,R9,R10,RA,RB,
01000 1 K,KQ,TWICE,RST7,RX,RXX,RTILT,RC,RZ,RW,J3,J4,
01100 1 J5,J6,J7,J8,J9,J10,J11,JQ(8),RJ
01200 COMMON/PTR/PWDS(1) /STF/RSTFAC(0/7),RSTJ2
01300 1 /LIMIT/LIMIT,ITEM,L,I,IX /ALF/INP,SLURY(72)
01400 CC DATA RSLUR/22.0/
01500 CF DATA RZZ/2.8/
01600 C DEFAULT VALUE OF SLUR CURVE FACTOR IS 2.8
01700
01800 CCC IF(JA.NE.12)GO TO 2
01900 CF RA=5.96*RSTJ2*R5
02000 CF L=3
02100 CF J8=J8*RDIS
02200 CF IF(J7.LE.J6)J7=J7+360
02300 CF KQ=6
02400 CF IF(PLT)KQ=1
02500 CF10 DO 3 K=J6,J7,KQ
02600 CF R=K
02700 CF CALL LINES(R3+RA*SIND(R),CENTR+RA*COSD(R),L)
02800 CF3 L=2
02900 CF J8=J8-1
03000 CF IF(J8)RETURN
03100 CF RA=RA+1/RDIS
03200 CF L=3
03300 CF GO TO 10
03400 CJA=12 DRAWS CIRCLES. P5=RADIUS, P6=DEGR.1, P7=DEGR.2,P8=THICK(EXPANDS
03500 CCC CALL CIRCLE
03600 CCC RETURN
03700
03800 C*** SLURS *** 5, POS1, STF, NT1, NT2, POS2, DIP(ABS. UNITS), P8
03900 C FOR P8: 0= SLUR, 1=BRACKETS, 2=LFT ONLY, 3=RT ONLY
04000 C P9=NUM IN BRACKET(IF NON-ZERO)
04100 2 IF(J8.GE.7)CALL BRKSLR
04200 C J8=7=SLUR WITH VERT. BRKTS. =8=BRKT ON LEFT ONLY. =9=ON RIGHT ONLY.
04300 J10=1
04400 J4=-1
04500 J5=1
04600 C ↑↑↑↑ FOR DPY ONLY (32 SEGS ARE USED)
04700 TWICE=-1
04800 IF(R3.GT.-1000)GO TO 2100
04900 R=-R3-1000
05000 L=R
05100 R=-(R3+1000+R)
05200 R3=RN(PWDS(L)+4)+R
05300 2100 IF(R6.GT.-1000)GO TO 21
05400 R=-R6-1000
05500 L=R
05600 R=-(R6+1000+R)
05700 R6=RN(PWDS(L)+4)+R
05800 COCT IF(R6)R6=202
05900 C R6=NEG. IS FOR PAGE-LAYOUT PROG. TELLS WHICH NOTE TO SLUR TO.
06000 21 RST7=RSTJ2*7.
06100 RJ=ABS(R7)
06200 C R7+100=LEFT HALF SLUR, +200=RIGHT HALF, +300=REVERSE DIRECTION.
06300 IF(RJ.LT.100)RJ=-1
06400 R7=AMOD(R7,100.0)
06500 IF(RJ.LT.300)GO TO 20
06600 RJ=0
06700 CC*** NOT YET! R5=R5-(2*R7)
06800 C R5 THINKS THE SLUR ISN'T REVERSED.
06900 C TO USE THIS ADD R6=SQRT((R5-R4)**2+(R6-R3)**2)+R3(WITH FACTORS)
07000 20 RQQ=R5-R4
07100 IF(R6.GT.1000)CALL RNOTE(R6)
07200 GO TO (5,6,7),J8+4
07300 GO TO 4
07400 CC5 R=32
07500 5 R=30
07600 C AFTER DOTTED NOTE
07700 GO TO 8
07800 6 R=22
07900 CC6 R=RSLUR
08000 C BETWEEN NOTES
08100 CC8 RX=-1.3
08200 8 RX=-0.75
08300 GO TO 9
08400 7 R=7
08500 RX=RSTJ2
08600 9 CALL RJBX(R)
08700 R6=R6+RX
08800 4 RXX=RHORZ(R6)-R3
08900 RTILT=RQQ*RST7
09000 80 RX=SQRT(RXX**2+RTILT**2)
09100 IF(J8.NE.-1)GO TO 1
09200 IF(RQQ.GT.8)RQQ=8
09300 IF(RQQ.LT.-8)RQQ=-8
09400 RQQ=RQQ*RSTFAC(J2)*1.0
09500 IF(R7)RQQ=-RQQ
09600 R3=R3-RQQ
09700 C MOVES STEEP SLUR LEFT OR RIGHT IF P8=-1
09800 1 R=CENTR
09900 IF(J8.GT.0)GO TO 180
10000 C JUMP FOR BRACKETS
10100 L=32
10200 CALL SLOOP
10300
10400 CF RB=RX/71.
10500 CF DO 81 K=0,71
10600 CF81 SLURX(K+1)=RB*(K)+R3
10700 CF RA=R7*RST7
10800 CF41 IF(R9.EQ.0)R9=RZZ
10900 CF R=R+RA
11000 CF L=0
11100 CF DO 40 K=36,1,-1
11200 CF L=L+1
11300 CF RW=R-RA*(K/36.)**R9
11400 CF SLURY(L)=RW
11500 CF40 SLURY(73-L)=RW
11600 CF L=72
11700
11800 CF89 IF(RTILT.EQ.0)GO TO 87
11900 CF RW=ATAN2(RTILT,RXX)
12000 CF RA=SIN(RW)
12100 CF RB=COS(RW)
12200 CF RZ=SLURX(1)
12300 CF RW=SLURY(1)
12400 CF DO 83 K=1,L
12500 CF R=SLURX(K)-RZ
12600 CF RXX=SLURY(K)-RW
12700 CF SLURX(K)=RB*R-RA*RXX+RZ
12800 CF83 SLURY(K)=RB*RXX+RA*R+RW
12900
13000 87 IF(J4)CALL LINES(SLURX(J10),SLURY(J10),3)
13100 J6=J10
13200 J7=L
13300 IF(J4.NE.0)GO TO 22
13400 CALL EXCH(J6,J7)
13500 J5=-1
13600
13700 22 IF(J11.NE.0)J11=3
13800 CALL SLRS
13900
14000 C22 IF(J11.EQ.0)GO TO 122
14100 CC IF(MOD(J11,2).EQ.0)J11=J11+1
14200 C MAKE SURE WE HAVE AN ODD NUMBER OF SEGMENTS FOR DASHES.
14300 C J11=3
14400 C KD=2
14500 C KT=0
14600 C KA=1
14700 C THIS WILL MAKE DASHED SLURS J11 HAS DASH SIZE.
14800 C DO 188 K=J6,J7,J5
14900 C KT=KT+1
15000 C IF(KT.LT.J11)GO TO 188
15100 C KT=0
15200 C KD=KD+KA
15300 C KA=-KA
15400 C BLANK-DASH FLIP-FLOP
15500 C188 CALL LINES(SLURX(K),SLURY(K),KD)
15600 C GO TO 123
15700
15800 C122 DO 88 K=J6,J7,J5
15900 C88 CALL LINES(SLURX(K),SLURY(K),2)
16000 123 IF(J5.GT.1)CALL LINES(SLURX(L),SLURY(L),2)
16100 C DISPLAY END POINT OF SLUR
16200 IF(TWICE)RETURN
16300 TWICE=TWICE-1
16400 GO TO 182
16500 180 RW=R+R7*RST7
16600 TWICE=-1
16700 CC KQ=1
16800 J5=1
16900 RX=RX+R3
17000 CC RA=(R5-R4)*RST7
17100 IF(J9.EQ.0)GO TO 181
17200 RZ=RTILT/(RX-R3)
17300 TWICE=2
17400 CC RZ=RX-R3
17500 RXX=RX
17600 RWID=(R3+RXX)/2.
17700 182 IF(TWICE.EQ.1)GO TO 183
17800 C DOES LEFT SIDE FIRST.
17900 IF(TWICE.EQ.0)GO TO 184
18000 C LAST IS NUMBER.
18100 J8=2
18200 RC=RSTJ2*13.
18300 RX=RWID-RC
18400 RWW=RTILT
18500 185 RTILT=RZ*(RX-R3)
18600
18700 C PUT IN FUNC. HERE FOR THIS SLOPE AND FOR PART. BEAMS.
18800
18900 GO TO 181
19000 183 J8=3
19100 RX=RXX
19200 RTILT=RWW
19300 RXX=R3
19400 R3=RWID+RC
19500 RXX=RZ*(R3-RXX)
19600 R=R+RXX
19700 RW=RW+RXX
19800 GO TO 185
19900
20000 181 SLURX(1)=R3
20100 SLURY(1)=R
20200 SLURX(2)=R3
20300 SLURY(2)=RW
20400 SLURX(3)=RX
20500 SLURY(3)=RW+RTILT
20600 SLURX(4)=RX
20700 SLURY(4)=R+RTILT
20800 L=4
20900 IF(J8.EQ.2)L=3
21000 IF(J8.EQ.3)J10=2
21100 CC TWICE=-1
21200 GO TO 87
21300 184 J3=RWID
21400 C PUT IN VERT. POS. WHEN SLOPE!
21500 R4=RQQ/2.+R4+R7-1.
21600 R6=0.875
21700 C SIZE(R6) IS 0.875 R7=1 IS FOR ITALICS
21800 R7=1
21900 R8=0
22000 CALL MAKNUM(R9)
22100 END
22200
22300 SUBROUTINE SCL
22400 C SETS UP SCALING MARKERS.
22500 COMMON /STF/RSTFAC(0/7),RSTJ2 /RINP/SU(900)
22600 COMMON R2,JA,CT,J2,R3,R4,R5,RJQ(17),J3,J4,J5,J6,J(16)
22700 1 /POSI/STFF(0/7),J102,POS
22800 J2=R2
22900 IF(J2.NE.99)GO TO 1008
23000 CALL HYDPOG(2)
23100 RETURN
23200 1008 J5=0
23300 J6=0
23400 RSTJ2=RSTFAC(J2)
23500 C SETS UP SCALE LINES.
23600 J4=200
23700 IF(R3.NE.0)J4=400
23800 C PUTS SCALE TO 400
23900 R2=STFF(J2)+60.*RSTJ2
24000 RJ=R2+60.
24100 CALL DPYSET(2,SU,700)
24200 CALL DPYBRT(3)
24300 POS=RJ+40.
24400 RSTJ2=1.
24500 DO 1002 MX=10,J4,10
24600 RA=RHORZ(FLOAT(MX))
24700 R3=RA-58
24800 IF(MX.GT.10)CALL PNUM
24900 CC1005 IF(R5.NE.0)GO TO 1007
25000 C JUMP FOR STAFF NUMBERS
25100 CALL LINX(RA,R2,RA,RJ)
25200 J5=J5+1
25300 1002 IF(J5.EQ.10)J5=0
25400 CALL LINES(-596.0,RJ,2)
25500 CALL LINES(-596.0,R2,2)
25600 R6=1.5
25700 C NEXT SETS UP STAFF NUMBERS TO FAR RIGHT(OUT OF WAY OF TYPING.)
25800 R3=615.
25900 DO 1007 K=0,7
26000 POS=STFF(K)+40.
26100 J5=IABS(K)
26200 CALL PNUM
26300 1007 CONTINUE
26400 CC CALL DPYDO(2)
26500 CALL DPYOUT(2)
26600 CALL SETPOG(1)
26700 END
26800
26900 FUNCTION IBLANK(IS,N)
27000 COMMON /XRN/RN(2000)
27100 IBLANK=0
27200 IF(AMOD(RN(IS+N),100.0).EQ.99.0)IBLANK=-1
27300 END
27400
27500 SUBROUTINE BMX(RA)
27600 C RA=NUMB. OF TAILS
27700 C VQ HOLDS TEMPORARY INFO RE. MULTIPLE BEAMS.
27800 COMMON E,F,G,H,RJQ(34),RB,VQX,JB,B,JV,JW /XRN/RN(1)
27900 1 /RINP/R(10,85),VQ(100) /STF/RSTFAC(0/7),RSTJ2
28000 1 /SCM/V(78),I,LCNT,STAFF,LIST(200),REND /RNW/RNW
28100 1/LIMIT/LIMIT,ITEM,LL,IS,IX /SC/J,L,MK
28200 1 ,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG,IXX,ISEMI,IQT
28300 1 ,VX(50),IAMP,K,KN,M,MODE,IBLA
28400 1 /SCX/JALPHA(30),JX,U,JZ,IRHY,JD,KA,KB,IZ
28500 M=IS-12
28600 RX7=RN(7+M)
28700 C ORIGINAL STEM DIR. AND NUM. OF BEAMS INFO.
28800 DO 1 L=KN,K
28900 B=R(7,L)
29000 JB=B/10
29100 B=B-JB*10
29200 C??? B=AMOD(R(7,L),10.0)
29300 IF(R(8,L).EQ.1000.)B=0
29400 C AVOIDS GRACE NOTES AND NON-NOTES
29500 IF(R(1,L).NE.1)B=0
29600 1 VQ(L)=B
29700 VQ(K+1)=0
29800 C CLEARS IT FOR ROUTINE AT '3'
29900 JB=KN
30000 RX8=0
30100 JBX=0
30200 C THE ABOVE 2 ARE FOR NEW COMPOSITE BEAM FEATURE 5/78
30300
30400 6 DIS=0
30500 RB9=0
30600 DO 2 L=JB,K
30700 IF(VQ(L).LE.RA)GO TO 2
30800 C SKIP IF EQ. TO PRESENT BEAM
30900 RB=VQ(L)
31000 LL=L
31100 4 DO 11 JD=LL,K
31200 VQX = VQ(JD)
31300 IF(VQX.GE.RB)GO TO 20
31400 IF(VQX.EQ.0)GO TO 11
31500 C VQX=0 ON NON-STEM NOTES OF CHORDS. (HENCE NO TAILS)
31600 21 B=10.
31700 IF(LL.GT.KN)GO TO 13
31800 GO TO 16
31900 20 JV=JD
32000 IF(VQX.GT.RB)GO TO 21
32100 11 JW=JD
32200 B=20
32300 C FINDS NEED FOR BEAM TO LEFT
32400 16 B=B+RA
32500 IF(JBX)GO TO 50
32600 C FOR NEW COMPOSITE BEAM FEATURE 5/78
32700 JE=RN(7+M)/10.
32800 RN(7+M)=JE*10.+RA
32900 GO TO 51
33000 50 DO 5 JE=1,6
33100 5 RN(JE+IS)=RN(JE+M)
33200 RN(7+IS)=RX7+RB-RA*2.
33300 C ADDS RIGHT NUM. OF BEAMS
33400 51 IF(LL.NE.JV)GO TO 10
33500 IF(LL.EQ.KN)GO TO 377
33600 IF(LL.NE.K)GO TO 10
33700 377 B=-B
33800 C PARTIAL, UNATTACHED BEAM IS PLACED AUTOMATICALLY IN ITMSUB.
33900 GO TO 8
34000 13 IF(JV.GT.LL)GO TO 14
34100 IF(R(7,LL+1).LT.10)GO TO 15
34200 C NEXT FOR DOT ON FOLLOWING NOTE.
34300 DIS=10.
34400 GO TO 19
34500 15 DIS=20.
34600 C SHORT INNER BEAM TO LEFT OF STEM
34700 19 B=-RA
34800 GO TO 16
34900 14 DIS=30
35000 C LONG INNER BEAM
35100 JV=-JV
35200 GO TO 16
35300
35400 C PARTIAL BEAM IS ON RIGHT(+) OR LEFT(-). RBM IS LENGTH.
35500 10 IF(LL.EQ.KN)GO TO 22
35600 IF(JV.GE.0)GO TO 17
35700 B=R(3,LL)
35800 JV=-JV
35900 LL=JV
36000 22 IF(VQ(JW+1).GT.VQ(JW))GO TO 17
36100 VQ(JW)=VQ(JW+1)
36200 JW=JW-1
36300 17 IF(LL.NE.JB)GO TO 18
36400 IF(B.LT.20.)LL=JV
36500 C PUTS BEAMS IN RIGHT PLACE.
36600 18 RC=R(10,LL)
36700 IF(RC.EQ.0)GO TO 23
36800 RB=RNW*RSTJ2
36900 IF(ABS(R(4,LL)).GE.100)RB=RB*.6
37000 C GET WIDTH OF NOTE(RNW) FOR DISPLACEMENT
37100 IF(RC.EQ.2)RB=-RB
37200 RC=RB
37300 23 RB9=RC+R(3,LL)
37400 C THIS WILL BE POS.3
37500 DIS=RA+DIS
37600 C DISPLACES
37700 GO TO 8
37800 2 CONTINUE
37900 RETURN
38000 8 JB=JW+1
38100 C FINDS SIDE (L,R) FOR PARTIAL BEAM
38200 C FOR NEW DISPLACEMENT
38300 RN(IS+11)=-1
38400 IF(RB9+DIS.EQ.0)GO TO 31
38500 IF(DIS.LT.10)GO TO 32
38600 IF(DIS.LT.30)GO TO 33
38700 C INNER PARTIAL BEAM IS NEXT
38800 DIS=DIS-30
38900 GO TO 31
39000 32 IF(B.GE.20)GO TO 12
39100 DIS=B-10
39200 B=-1
39300 C -1 PICKS UP POS OF P3
39400 GO TO 31
39500 12 DIS=B-20
39600 B=RB9
39700 RB9=-1
39800 C -1 IN P9 WILL PICK UP POS OF P6
39900 C INNER BEAM ATTACHED TO LFT SIDE.
40000 GO TO 31
40100 33 B=-DIS
40200 DIS=0
40300 31 L=IS
40400 IF(JBX)GO TO 53
40500 L=M
40600 DIS=(RB-RA)*100.+1.
40700 53 IF(RX8.GT.1.)GO TO 52
40800 IF(RB9.NE.0)GO TO 52
40900 IF(RX8.NE.0)GO TO 54
41000 RX8=B
41100 GO TO 52
41200 54 RN(8+M)=-30
41300 C TWO UNATTACHED BEAMS, LEFT AND RIGHT
41400 RX8=1
41500 GO TO 55
41600 52 RN(8+L)=B
41700 RN(9+L)=RB9
41800 RN(10+L)=DIS
41900 IF(JBX)CALL UPDATE(9)
42000 C ADDED ANOTHER ITEM (PART. BEAM)
42100 JBX=-1
42200 JA=0
42300 55 IF(JB.LE.K)GO TO 6
42400 END
42500
42600 SUBROUTINE ACSHFT(RX)
42700 COMMON /XRN/RN(1) /STF/RSTFAC(0/7),RSTJ2
42800 1 /SCM/V(78),I,LCNT,STAFF,LIST(200),REND
42900 1 /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA
43000 1,DBST,NFLG,IXX,ISEMI,IQT,F(50),IAMP,K,KN,M,MODE,IBLA
43100 1 /RINP/R(10,85),VQ(100)
43200 EQUIVALENCE (A,F(1)),(B,F(2)),(X,F(4)),
43300 1(Y,F(5)),(Z,F(6)),(JD,F(7)),(RN1,F(8)),(RH,F(9))
43400 Z=0
43500 L=K-1
43600 M=L-ABS(RX)
43700 JD=1
43800 RN1=99
43900 Y=-.23
44000 IF(RX.LT.0)GO TO 1
44100 L=M
44200 M=K-1
44300 JD=-1
44400 1 DO 2 N=M,L,JD
44500 C DOES IT HAVE AN ACCID?
44600 IF(AMOD(R(5,N),10.).EQ.0)GO TO 2
44700 A=0
44800 B=0
44900 IF(N.LT.L)A=R(6,N+1)
45000 IF(N.GT.M)B=R(6,N-1)
45100 IF(RN1.NE.99)GO TO 3
45200 C IS THIS THE FIRST ACCID?
45300 RN1=R(4,N)
45400 GO TO 6
45500 3 RH=R(4,N)
45600 IF(ABS(RH-RN1).LT.5)GO TO 4
45700 RN1=RH
45800 IF(Y.GT.0)Z=Z+.04
45900 C STOPS OCT., ETC. ACCIS BEING MOVED TO LEFT.
46000 Y=-.23+Z
46100 6 IF(A.EQ.20)GO TO 477
46200 IF(B.NE.20)GO TO 4
46300 477 Y=Z
46400 4 X=0
46500 IF(R(6,N).EQ.20)X=-.24
46600 IF(R(6,N).EQ.10)X=.24
46700 Y=Y+.23
46800 IF(X+Y.LT.1)GO TO 7
46900 RN1=RH
47000 Z=Z+.04
47100 Y=0
47200 IF(A.EQ.20)GO TO 677
47300 IF(B.NE.20)GO TO 577
47400 677 Y=.23
47500 C SO Y DOESN'T GET >1.
47600 577 Y=Y+Z
47700 7 X=X+Y
47800 IF(ABS(X-.04).LT..01)X=0
47900 IF(X.GE.0)GO TO 5
48000 Y=.23+Z
48100 X=Z
48200 5 R(5,N)=R(5,N)+X*RSTFAC(IFIX(STAFF))
48300 C SPACING OF ACCI. DEPENDS ON STAFF SIZE FACTOR AT THIS POINT
48400 2 CONTINUE
48500 END
48600
48700 C SETUP ALLOWS SETING UP RHYTHMS ON DESIGNATED STAFF FOR SPACING ALL OTHERS.
48800 SUBROUTINE SETUP
48900 INTEGER PWDS
49000 COMMON /SCM/V(78),IV,LCNT,STAFF,LIST(200),REND
49100 1 /PTR/PWDS(1) /LIMIT/LIMIT,ITEM,L,I,IX
49200 1 /DPY/ST(4000),MEDIT,GO /XRN/RN(1)
49300 1 /RMOD/RMODE2,SET4,IBEAM,NOSET,STEM,STUP,NTC,
49400 1 ENDP,RA,RDD,ITB,POSB
49500 DIMENSION RPOS(2,100)
49600 EQUIVALENCE (RPOS,ST(3400))
49700
49800 C RHYTHMIC VALUES ARE SAVED IN P9 OF NOTES AND P7 OF RESTS.
49900 STUP=-1
50000 C THIS SENDS INFO TO SUBR. NOTES
50100 IF(SET4.GT.7)RETURN
50200 C **** BE SURE SETUP STAFF HAS SPACE VALUES IN NOTES AND RESTS!!!
50300 IF(ITEM.EQ.0)RETURN
50400 JX=0
50500 RA=0
50600 DO 9534 K=1,ITEM
50700 L=PWDS(K)
50800 IF(RN(L+2).NE.SET4)GO TO 9534
50900 RD=RN(L+1)
51000 IF(RD.LT.5)GO TO 5
51100 IF(RD.LT.17)GO TO 9534
51200 5 IF(RD.GT.2)GO TO 6
51300 RC=7
51400 IF(RD.EQ.2)RC=5
51500 IF(RN(L).LT.RC)GO TO 9534
51600 M=9
51700 IF(RD.EQ.2)M=7
51800 RC=RN(L+M)
51900 IF(RC.EQ.0)GO TO 9534
52000 C FOR OTHER NOTES ON SPACING STAFF.
52100 IF(RC.EQ.4./88.)GO TO 9534
52200 C THESE FOR GRACE NOTES (1/88 NOTES)
52300 GO TO 7
52400 C SKIPS 'OTHER' CHORD TONES (I.E. P9=0 IN A NOTE)
52500 6 IF(RD.NE.3)GO TO 8
52600 IF(RN(L).LT.3)GO TO 7
52700 RC=RN(L+5)
52800 IF(RC.GE.100)GO TO 7
52900 IF(RC.GT.3)GO TO 9534
53000 C SKIPS IF NOT A REAL CLEF (+100=MINI CLEF)
53100 GO TO 7
53200 8 IF(RD.NE.4)GO TO 10
53300 IF(RN(L).GT.2)GO TO 9534
53400 C SKIPS IF NOT BARLINE (I.E. ONLY 4 PARAMS)
53500 10 IF(RD.NE.2)GO TO 7
53600 IF(RN(L).LT.5)GO TO 9534
53700 IF(RN(L+7).EQ.0)GO TO 9534
53800 7 JX=JX+1
53900 RPOS(1,JX)=RN(L+3)
54000 IF(RD.GT.2)GO TO 3
54100 C JUMP WHEN TIME VALUES ARE IN P8
54200 C FOR VALUES AUTOMATICALLY SET. ALLOWS NON-DUPLE UNITS IN SETUP
54300 277 RA=RA+RC
54400 C SUM OF RHYTHS
54500 GO TO 77
54600 3 RC=-RD
54700 77 RPOS(2,JX)=RC
54800 C RC IS RHYTHMIC VALUE OF NOTE.
54900 9534 CONTINUE
55000 C NEXT PUTS ITEMS IN PROPER ORDER IF THEY WEREN'T ALREADY
55100 C*** 2ND NOTE OF DBL STOP CAN'T!! HAVE RHYTH. VALUE *******
55200 IF(RA.EQ.0)RETURN
55300 C RA=0 MEANS DIDN'T FIND RHYTHMS ON SPACING STAFF.
55400
55500 CALL SORT2(RPOS,JX)
55600 ENDP=200.
55700 IF(RPOS(2,JX))ENDP=RPOS(1,JX)
55800 DO 1 L=1,JX
55900 1 IF(RPOS(2,L).GT.0)GO TO 4
56000 4 RD=RPOS(1,L)
56100 RB=ENDP-RD
56200 C TOTAL SPACE FROM 1ST NOTE TO END OF LINE
56300 RC=RPOS(2,L)
56400 RPOS(2,L)=RD
56500 C REAL AND AVERAGED POSITIONS OF 1ST NOTE ARE THE SAME.
56600 DO 2 K=L+1,JX
56700 RE=RPOS(2,K)
56800 IF(RE)GO TO 2
56900 RD=RC/RA*RB+RD
57000 RC=RE
57100 RPOS(2,K)=RD
57200 2 CONTINUE
57300 C 1,K=REAL POS. 2,K=AVERAGED POS.
57400 C IN RHYTH: POS=(P1-AVG2)*(RL2-RL1)/(AVG2-AVG1)+RL1
57500 JX=JX+1
57600 RPOS(1,JX)=ENDP
57700 RPOS(2,JX)=ENDP
57800 STUP=0
57900 C THIS FOR NOTES AND RHYTH
58000 END
58100
58200 SUBROUTINE TYPE
58300 COMMON/ALF/INP(72),ML /IDEV/IDEV /MKX/KSLA,ISEMI,LESS,IGT
58400 IF(IDEV.NE.5)GO TO 2
58500 1 CALL TYPSTR('TYPE --')
58600 CALL TYPCRL
58700 2 READ(IDEV,2114,END=167)INP
58800 IF(INP(1).EQ.LESS)GO TO 167
58900 IF(INP(1).NE.IGT)RETURN
59000 IDEV=1
59100 GO TO 2
59200 167 IDEV=5
59300 GO TO 1
59400 2114 FORMAT(72A1)
59500 C FOR 'SCORE' INPUT
59600 END
59700
59800 SUBROUTINE SETLET
59900 COMMON/SCM/V(76),RR4,NN,Y,LCNT,STAFF,JLIST(200),REND
60000 C NOTE DIFFERENCE IN V ARRAY LNGTH 76+RR4+NN
60100 COMMON /MKX/KSLA,ISEMI,LESS,IGT
60200 COMMON R2,JA,CENTR,J2,R3,R4,R5,RJQ(17),JQ(14),M,K,J,X,A,JR
60300 1 /PTR/KWDS(1) /IDEV/IDEV /DL/IX22
60400 COMMON/FRMT/F78F(1),FA1(1),FA5(1),KK /ALF/INP(72),ML
60500 COMMON/SCN/LEL,LR,LU,LD,SLA,LE,LC,LS,LF,LA,LI,LW
60600 1 /POSI/STFP(0/7),J102,POS /LIMIT/LIMIT,ITEM,L,I,IX /XRN/RN(1)
60700 1 /RINP/RPOS(2,450) /DPY/ST(4000),MEDIT,IGO
60800 DIMENSION SU(320)
60900 EQUIVALENCE (J5,JQ(3)),(ISET,RJQ(9)),(SU(1),ST(3600))
61000 X=0
61100 IF(IX22.EQ.0)GO TO 10
61200 C NEXT FOR 'CP n' TO CENTER ITEM BY NOTE POSITION
61300 X=R2
61400 R2=RN(KWDS(IX22)+2)
61500 10 KK=L
61600 C L=NUMBER OF ITEMS TYPED +1
61700 M=1
61800 IF(R4.EQ.0)KK=0
61900 C =0 ALWAYS WANTS PAIRS OF NUMS.
62000 RR4=R4
62100 C GIVEN VERTICAL POS.
62200 R4=20
62300 RPOS(1,1)=0
62310 A=1.
62320 IF(IX22.NE.0)A=2.
62400 DO 1 K=1,ITEM
62410 L=KWDS(K)
62420 IF(RN(L+2).NE.R2)GO TO 1
62430 IF(RN(L+1).GT.A)GO TO 1
62440 C USES NOTES AND RESTS WITH 'CP'
62500 CC14 IF(FINDIT(K))GO TO 1
62600 C SKIPS NON-NOTES AND WRONG STAFF
62700 M=M+1
62800 RPOS(1,M)=RN(L+3)
62900 1 CONTINUE
62902 C NEXT FOR 'CP' ONLY. LOOKS AT RESTS TOO!
63000 IF(M.EQ.1)RETURN
63100 C M=1 MEANS NO NOTES ON THIS LINE
63200 CALL DPYSET(3,SU,320)
63300 CALL DPYBRT(6)
63400 POS=STFP(J2)
63500 J5=1
63600 CALL SORT2(RPOS,M)
63700 K=2
63800 JSET=ISET
63900 22 IF(IFIX(RPOS(1,K)*100.).NE.IFIX(RPOS(1,K-1)*100.))GO TO 2
64000 C ROUNDS OFF POSITION TO 2 DECI. PLACES
64100 M=M-1
64200 DO 20 J=K,M
64300 20 RPOS(1,J)=RPOS(1,J+1)
64400 C DELETES DOUBLE-STOPS - DOESN'T PUT NUM OVER 1ST NOTE.
64500 IF(M.LT.K)K=M
64600 GO TO 22
64700 2 K=K+1
64800 IF(K.LT.M)GO TO 22
64900 DO 4 K=2,M
65000 R3=RHORZ(RPOS(1,K))
65100 CALL PNUM
65200 J5=J5+1
65300 4 IF(J5.EQ.10)J5=0
65400 CALL DPYOUT(3)
65500 CC CALL DPYDO(3)
65600 CALL SETPOG(1)
65700 RPOS(1,M+1)=200
65800 NN2=1
65900 J=1
66000 IF(IX22.EQ.0)GO TO 11
66100 R3=0
66200 JA=3
66300 R4=0
66400 IF(X.NE.0)GO TO 12
66500 CALL TYPSTR(' POS = ')
66600 GO TO 1301
66700 12 X=X+1.
66800 GO TO 3
66900 11 JJ=1
67000 C FLAG FOR ALL BLANKS AT END OF LINE
67100 30 MM=-1
67200 K=JJ
67300 300 LL=INP(K)
67400 IF(LL.NE.' ')MM=0
67500 IF(LL.EQ.KSLA)GO TO 301
67600 IF(K.GE.72)GO TO 301
67700 K=K+1
67800 GO TO 300
67900 167 IDEV=5
68000 301 IF(MM)GO TO 31
68100 IF(IDEV.EQ.1)GO TO 1301
68200 CALL TYPSTR(' POS. FOR -- ')
68300 DO 302 LL=JJ,K
68400 302 CALL TYPCHR(INP(LL),1)
68500 CALL TYPSTR(' ')
68600 1301 NN=NN2
68700 NN2=NN2+1
68800 IF(NN.GT.1)GO TO 1267
68900 READ(IDEV,F78F,END=167)V
69000 IF(V(1).NE.99.)GO TO 2267
69100 C READS 38 NUMS. 1ST TIME. NOW '99' = 1,2,3,...38 (VERT. PRESET)
69200 X=0
69300 DO 3267 LL=1,76,2
69400 X=X+1.0
69500 V(LL)=X
69600 3267 V(LL+1)=RR4
69700 5267 NN=76
69800 GO TO 31
69900 2267 IF(V(3).EQ.0)GO TO 267
70000 C NOTE NUMS CAN BE ON 1 LINE IF THERE ARE >2. (VERT. POS. MUST BE PRESET)
70100 NN=38
70200 DO 4267 LL=76,1,-2
70300 V(LL)=RR4
70400 V(LL-1)=V(NN)
70500 4267 NN=NN-1
70600 GO TO 5267
70700 1267 READ(IDEV,F78F,END=167)V(NN),V(NN2)
70800 REREAD FA1,JJ
70900 IF(JJ.EQ.LESS)GO TO 167
71000 IF(JJ.NE.IGT)GO TO 267
71100 IDEV=1
71200 GO TO 302
71300 267 IF(RR4.NE.0.AND.V(NN2).EQ.0)V(NN2)=RR4
71400 NN2=NN2+1
71500 V(NN2)=0
71600 JJ=K+1
71700 IF(K.LT.72)GO TO 30
71800
71900 31 X=V(J)+1
72000 IF(KK.NE.0)KK=NN-1
72100 DO 32 K=NN,1,-1
72200 32 IF(V(K).NE.0)GO TO 320
72300 320 IF(K.GT.KK)KK=-1
72400 C NOW PAIRS OF NUMS WILL SET INDIV. VERT. POS.; SINGLE DON'T
72500 IF(RN(ISET+1).NE.16.)GO TO 6
72600 C TRAP DASH AT FIRST OF LINE.
72700 3 K=X
72800 A=RPOS(1,K)
72900 B=RPOS(1,K+1)
73000 R2=A+(B-A)*(X-K)
73100 IF(IX22.NE.0)RETURN
73200 C GO BACK IF SETTING POSITION WITH 'CP'
73300 RN(ISET+3)=R2
73400 IF(KK.GT.0)GO TO 5
73500 C NEXT FOR PAIRS OF NUMS.
73600 RN(ISET+4)=V(J+1)
73700 J=J+2
73800 GO TO 6
73900 C IF P4≠0 TYPE ONLY 1 # FOR EACH ITEM. ALL ITEMS WILL BE AT VRT PS OF P4
74000 C TYPE Nn, Vert pos/Nn, Vert pos/ OR Nn/Nn/ (if P4≠0)
74100 5 J=J+1
74200 6 ISET=ISET+RN(ISET)+3
74300 IF(ISET.GE.I)GO TO 7
74400 IF(RN(ISET).EQ.8)GO TO 6
74500 C =8 MEANS MORE LETTERS TO COME.
74600 X=V(J)+1
74700 IF(X.GT.1)GO TO 3
74800 C CAN'T PUT LETTER AT POS. 0 *********
74900 IF(IDEV.EQ.1)RETURN
75000 7 K=ITEM+1
75100 CALL TYPSTR('FIRST ITEM WAS ')
75200 CALL TYPINT(K)
75300 CALL TYPCRL
75400 C NOW CHECK FOR DASHES
75500 17 IF(RN(JSET+1).NE.4)GO TO 117
75600 RN(JSET+3)=RN(ISET+3)+1.
75700 C ASSUMES SOME CODE 16 CHAR. JUST BEFORE DASH. IX IS TOTAL NUM. OF ITEMS.
75800 CALL DASHES(IX,RN(JSET+2),RN(JSET+3))
75900 CC CALL DASHES(IX,R2,RN(JSET+3),RN(JSET+4),RN(JSET+5),RN(JSET+6))
76000 117 ISET=JSET
76100 JSET=JSET+RN(JSET)+3
76200 IF(JSET.LT.I)GO TO 17
76300 END
76400
76500 SUBROUTINE BEAMX
76600 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20) /RRJJ/RJJ2,RJJ(20)
76700 1 /LIMIT/LIMIT,ITEM,L,I,IX /STF/RSTFAC(0/7),RSTJ2
76800 EQUIVALENCE (J3,JQ(1)),(J4,JQ(2)),(J5,JQ(3)),(R5,RJQ(3)),
76900 1 (R6,RJQ(4)),(J10,JQ(8)),(J6,JQ(4)),(R4,RJQ(2)),(R7,RJQ(5))
77000 1,(R3,RJQ(1)),(J8,JQ(6)),(J7,JQ(5))
77100 1,(R11,RJQ(9)),(R10,RJQ(8)),(R8,RJQ(6)),(RJ3,RJJ(1))
77200 1,(R9,RJQ(7)),(J9,JQ(7))
77300
77400 IF(J10.GE.100)GO TO 6
77500 CALL BMSTF
77600 RETURN
77700 6 JZ=-2
77800 JX8=R8
77900 IF(JX8.GE.-1)GO TO 16
78000 JX8=R8/10.0
78100 JX8=JX8*10
78200 C MAKE SURE LAST DIGIT IS ZERO
78300 R8=JX8
78400 16 RR8=R8
78500 R8=0
78600 RR9=R9
78700 R9=0
78800 RR6=R6
78900 RR3=R3
79000 RR4=R4
79100 RR5=R5
79200 RSTJ=RSTJ2
79300 J=10*(J7/10)
79400 C J=STEM DIR. (10 OR 20)
79500 JJ=J10/100
79600 JJ10=J10-JJ*100
79700 C IF 3RD DIGIT OF P10 = 0, THEN TWO SECONDARY BEAM GROUPS ARE MADE.
79800 C THEN P8 AND P9 ARE THE LIMITS OF THE GAP BETWEEN THE SECONDARY GROUPS.
79900
80000 C IF 3RD DIGIT OF P10 = 1, THEN SINGLE SECONDARY BEAM GROUP IS MADE.
80100 C THEN P8 AND P9 ARE THE OUTER LIMITS OF THE SECONDARY GROUP
80200 JJ7=J7-J
80300 C J7=NUM. OF FULL BEAMS (1ST DIGIT OF P10=NUM OF ADDED BEAMS)
80400 7 J10=0
80500 5 J8=R8
80600 J9=R9
80700 R7=J7
80800 R10=J10
80900 CALL BMSTF
81000 JZ=JZ+1
81100 IF(JZ)1,2,3
81200 3 RETURN
81300
81400 1 IF(RR8.GE.0)GO TO 8
81500 IF(JX8.GE.-20)GO TO 11
81600 C UNATTACHED PARTIAL BEAM:
81700 C P8= -10=ON LEFT, -20=RIGHT, -30=BOTH
81800 RR8=RR8+10
81900 IF(JX8.EQ.-31)GO TO 11
82000 JX8=JX8-1
82100 RR9=0
82200 C ↑↑↑ A PRECAUTION
82300 JZ=JZ-2
82400 11 R8=RR8-AMOD(R7,10.0)
82500 10 R9=RR9
82600 JZ=JZ+1
82700 GO TO 4
82800 8 IF(JJ10.EQ.0)GO TO 9
82900 C NEXT MAKES ONE SECONDARY BEAM GROUP.
83000 R8=RR8
83100 GO TO 10
83200 9 R8=-1
83300 R9=RR8
83400 4 J7=J+JJ
83500 R6=RR6
83600 R3=RR3
83700 J3=RR3
83800 R4=RR4
83900 R5=RR5
84000 J10=JJ7
84100 C J10 IS DISPLACEMENT FOR OTHER BEAMS
84200 RSTJ2=RSTJ
84300 GO TO 5
84400 2 R8=RR9
84500 R9=-1
84600 GO TO 4
84700 END